#ifndef GSNAMESPACE_H
#define GSNAMESPACE_H

#include <QObject>

/*
    Defines some global enums. if any of these enums are used, include this
    header file and "using namespace Ghoststory"
*/


namespace gs
{

/* Declare all public classes here
   May not need all of them.
*/

//battledialogitems.h
class BattleDialogGhostCard;
class BattleDialogGhostMarker;
class BattleDialogButton;
class BattleDialogTaoButton;
class BattleDialogGhostStatus;
class BattleDialogTaoResult;

//battledialog.h
class BattleDialog;

//shopdialog.h
class ShopDialog;

// cutscene.h
class CutSceneManager;
class GhostingGraphicsObject;

//shopdialogitem.h
class ShopDialogBg;
class ShopDialogOwner;
class ShopDialogText;
class ShopDialogButton;

//playerskilldialoge.h
class BottomLessDialog;

// gameboarditem.h
class GameBoardItem;
class GameBoardFrame;

// gameboardorganizer.h
class GameBoardOrganizer;
class GhostBoard;
class TileBoard;
class CenterTable;
class LeftTable;
class RightTable;
class BottomTable;
class pIconOrganizer;

// gamedialog.h
class GameDialogBg;
class GameDialog;
class GameSlotRequestDialog;
class GameMessageBox;
class GameTileRequestDialog;
class GameTaoRequestDialog;
class GameDiceRequestDialog;
class GamePlayerRequestDialog;

// gamedialogitem.h
class GameDialogItem;
class GameDialogButton;
class GameDialogDice;
class DialogTips;
class TaoItemButton;
class GameDialogHeadButton;

// gamedialogmanager.h
class GameDialogManager;

// gametable.h
class GameTable;
class ItemManager;

// gamewindow.h
class GameWindow;
class GameScene;
class CenterTable;

class InfoBoard;
class DeckBoard;

// gameanimation.h
class GameSeqAnimation;
class GameParAnimation;
class GhostingGraphicsObject;

// ghost.h
class Ghost;
class GhostManager;

// ghostboarditems.h
class GhostSlotGhostItem;
class GhostSlot;
class PlayerHeadArea;
class GhostBoardBottom;
class GhostBoardTop;

// infoboard.h
class ResistItem;
class ResistItemGroup;
class GhostCard;
class GhostSkillSlot;
class GhostSkillSlotGroup;
class InfoBoard;
class DeckBoard;

// player.h
class Player;
class PlayerIcon;

// playerskillobject.h
class PlayerSkillObject;
class BottomLessSkill;
class DancePeaksSkill;
class TwinWindsSkill;

// playeritems.h
class TaoFieldBg;
class TaoItem;
class TaoSlot;
class PlayerHead;
class PlayerQi;
class PlayerYin;
class PlayerBudd;
class PlayerSkill;
class ActionButton;
class BottomLessSkill;
class PlayerTaoField;
class FrontTaoField;
class HiddenTaoField;
class PlayerBasic;
class PlayerAction;
class MoveButton;
class ShopButton;
class FightButton;
class PlayerHeadQi;
class PlayerBriefInfoUp;

// tileboarditems.h
class VillageTile;
class TeashopTile;
class SorcererTile;
class AltarTile;
class PavilionTile;

// windowskin.h
class WindowSkin;

// ghostskill.h
class GhostSkillObject;
class GhostSkillList;
class GhostSkillFactory;

//gamePhaseControl.h
class GamePhaseControl;

/* Declare public enums here */
enum GSColor
{
    RED = 0,
    YELLOW ,
    BLUE,
    GREEN,
    BLACK,
    WHITE
};

enum GSWindowStyle
{
    FFStyle = 0,
    TouhouStyle,
    TouhouStyle2,
    TestStyle,
    SimpleStyle,

    PinStyle = 10
};



/* define possible ghost skills here.
           this also includes ghost rewards

           If more than one skills(rewards) are needed, use binary operator '|' to
           combine them.
             eg:
             QI + TAO => QI | TAO
         */
enum GhostSkill
{
    ONE_MORE_CARD = 0x01 << 0, //done
    INSTANT_HAUNT = 0x01 << 1,
    CURSE_DICE    = 0x01 << 2, //done
    GHOSTS_MARCH  = 0x01 << 3,
    SEAL_SKILLS   = 0x01 << 4, //done
    DICE_HOLDER   = 0x01 << 5, //done
    LOSE_QI       = 0x01 << 6, //done
    HAUNTER       = 0x01 << 7,
    LOSE_FABAO    = 0x01 << 8, //done

    QI            = 0x01 << 9, // rewards start from 0x01000
    TAO           = 0x01 << 10,
    YINYANG       = 0x01 << 11,

    NO_SKILL      = 0x00
};

Q_DECLARE_FLAGS( GhostSkills, GhostSkill )
Q_DECLARE_OPERATORS_FOR_FLAGS( GhostSkills )

}

class init_enums : QObject
{
    Q_OBJECT
    Q_ENUMS( gs::GhostSkill gs::GSColor )
};

#endif // GSNAMESPACE_H
